#!/usr/bin/env python
# -*- coding: utf-8 -*-


import pygame, os, sys, random
from pygame.locals import *
pygame.init()


# Carrega a musica de fundo
pygame.mixer.init()
pygame.mixer.music.load("sounds" + os.sep + "song2.mp3")
pygame.mixer.music.set_volume(.7)
pygame.mixer.music.play(-1)

# Som de colisao com a tela
pong = pygame.mixer.Sound('sounds' + os.sep + 'pong.wav')
pong.set_volume(.8) 
# Som de colisao com o bouncer
som_barra = pygame.mixer.Sound('sounds' + os.sep + 'barra.wav')


clock = pygame.time.Clock()
     
# Configuracao da tela
largura_tela, altura_tela = 800, 600
tela = pygame.display.set_mode((largura_tela,altura_tela), 0, 32)
pygame.display.set_caption("Brick by Brick - Level 1")
fundo = pygame.image.load("images" + os.sep + "brickfundolevel1modificado.jpg").convert()

# Configuracao do tijolo
tijolo = pygame.image.load("images" + os.sep + "tijolo2.png").convert()
largura_tijolo, altura_tijolo = tijolo.get_size()
tijolo_x, tijolo_y = (90, 100)

# Configuracao da Barra
imagem_barra = pygame.image.load('images' + os.sep + "bouncer3.png").convert_alpha()
largura_barra, altura_barra = imagem_barra.get_size()
barra_x, barra_y = (largura_tela/2 - largura_barra/2), (altura_tela - altura_barra * 6)

# Configuracao da Bola
imagem_bola = pygame.image.load('images' + os.sep + "ball4.png").convert_alpha()
largura_bola, altura_bola = imagem_bola.get_size()
bola_x, bola_y = (largura_tela/2 - largura_bola/2), 500
posicao_inicial = (bola_x, bola_y)
bola_varia_x = 4 # Velocidade
bola_varia_y = 4

morte = True
vida = 3
max_vidas = 5
score = 0
fundocor = (0,0,0)

x = 90 # Posicao dos tijolos
y = 0
x1 = x + largura_tijolo
y1 = y + altura_tijolo
lista = []

for i in range(11):
	lista.append((x, y, x1, y1))
	x+= 55
	x1 = x + largura_tijolo 
		
x = 150
y += altura_tijolo
x1 = x + largura_tijolo
y1 = y + altura_tijolo
for i in range(9):
	lista.append((x, y, x1, y1))
	x += 55	
	x1 = x + largura_tijolo 
			
x = 260
y += altura_tijolo
x1 = x + largura_tijolo
y1 = y + altura_tijolo
for i in range(5):
	lista.append((x, y, x1, y1))
	x += 55	
	x1 = x + largura_tijolo

sorteados = {} #### Nao da certo porque la em baixo (i) retorna (x,y,x1,y1)
for i in range(20):
	sorteados[random.randint(0,len(lista))] = 0
		

while True:
	bola_rect = imagem_bola 
	barra_rect = imagem_barra
	posicao_inicial = (barra_x+20, barra_y - 40)
	
	for event in pygame.event.get():
		if event.type == QUIT:
			exit()

		if event.type == KEYDOWN:
			if event.key == K_ESCAPE:
				exit()
			if event.key == K_SPACE:
				if morte:
					bola_varia_x, bola_varia_y = 5, 5
					morte = False
					
	pressed_keys = pygame.key.get_pressed()

	# Movimentando a bola
	bola_x += bola_varia_x
	bola_y += bola_varia_y

	# Movimentando a barra
	if pressed_keys[K_LEFT] and barra_x > 0:
		barra_x -= 8
	if pressed_keys[K_RIGHT] and barra_x < 680:
		barra_x += 8	
	if morte:
		bola_x, bola_y = barra_x + (largura_barra/2 - largura_bola/2), barra_y - altura_bola/1.40
		
	
	# Verificando a colisao com a tela
	if bola_x <= 0 or bola_x + largura_bola >= largura_tela:
		bola_varia_x = -bola_varia_x
		pong.play(0)
		
	if bola_y <= 0:
		bola_varia_y = -bola_varia_y
		pong.play(0)
			
	if bola_y <= barra_y:
		bola_varia_y = +bola_varia_y
		
	if bola_y + altura_bola >= 500: #evento = morre
		bola_x, bola_y = posicao_inicial[0], posicao_inicial[1]
		bola_varia_x, bola_varia_y = 0,0
		morte = True
		vida -= 1

	# Verificando a colisao com a barra
	if bola_y + altura_bola >= barra_y:
		if barra_x <= bola_x + largura_bola and bola_x <= barra_x + largura_barra:
			bola_varia_y = -bola_varia_y
			bola_y = bola_y - 5 # Tratamento da colisao lateral
			if not morte:
				som_barra.play(0)
			
		elif barra_x <= bola_x + largura_bola <= barra_x + largura_barra:
			bola_varia_y = -bola_varia_y
			
	# Verificando colisao com o tijolo
	bola_x1 = bola_x + largura_bola
	bola_y1 = bola_y + altura_bola
	

	
	for i in lista:
		if i[1] <= bola_y1 <= i[3] and i[0] < bola_x < i[2]: # Colisao abaixo do tijolo
			bola_varia_y = -bola_varia_y
			bola_y += 10
			if i in sorteados.keys():
				sorteados[i] += 1
				if sorteados[i] == 3:
					lista.remove(i)
			else: lista.remove(i)
			score += 10
			break
		if i[1] <= bola_y <= i[3] and i[0] < bola_x < i[2]: # Colisao acima do tijolo
			bola_varia_y = -bola_varia_y
			bola_y -= 10
			if i in sorteados.keys():
				sorteados[i] += 1
				if sorteados[i] == 3:
					lista.remove(i)
			else: lista.remove(i)
			score += 10
			break
		if i[0] <= bola_x <= i[2] and i[1] < bola_y < i[3]: # Colisao a direita do tijolo
			bola_varia_x = -bola_varia_x
			bola_x += 10
			if i in sorteados.keys():
				sorteados[i] += 1
				if sorteados[i] == 3:
					lista.remove(i)
			else: lista.remove(i)
			score += 10
			break
		if i[0] <= bola_x1 <= i[2] and i[1] < bola_y < i[3]: # Colisao a esquerda do tijolo
			bola_varia_x = -bola_varia_x
			bola_x -= 10
			if i in sorteados.keys():
				sorteados[i] += 1
				if sorteados[i] == 3:
					lista.remove(i)
			else: lista.remove(i)
			score += 10
			break
		
	

					

			
	tela.blit((fundo), (0,0))
	
	# Vidas
	fonte = pygame.font.SysFont('trebuchet', 40)
	vidas = fonte.render('Vidas: '+str(vida), True, (255, 255, 255),(0, 0, 0))	
	tela.blit(vidas, (500, 570))
	
	# Score
	fonte = pygame.font.SysFont('trebuchet', 40)
	vidas = fonte.render('Score: '+str(score), True, (255, 255, 255),(0, 0, 0))	
	tela.blit(vidas, (650, 570))
	
	if vida == 0:
		msg = pygame.font.Font(None,70).render("Game Over", True, (255,255,255), fundocor)
		msgrect = msg.get_rect()
		msgrect = msgrect.move(largura_tela / 2 - (msgrect.center[0]), altura_tela / 3)
		tela.blit(msg, msgrect)
		pygame.display.flip()
		while 1:
			restart = False
			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					sys.exit()
				if event.type == pygame.KEYDOWN:
					if event.key == pygame.K_ESCAPE:
						sys.exit()
					
	if lista == []: # Verifica se nao tem mais tijolos
		msg = pygame.font.Font(None,70).render("Win", True, (255,255,255), fundocor)
		msgrect = msg.get_rect()
		msgrect = msgrect.move(largura_tela / 2 - (msgrect.center[0]), altura_tela / 3)
		tela.blit(msg, msgrect)
		pygame.display.flip()
		while 1:
			restart = False
			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					sys.exit()
				if event.type == pygame.KEYDOWN:
					if event.key == pygame.K_ESCAPE:
						sys.exit()

	
	for i in lista:
		tela.blit(tijolo, (i[0],i[1]))

		
	tela.blit(imagem_bola, (bola_x, bola_y))
	tela.blit(imagem_barra, (barra_x, barra_y))

	clock.tick(80)
	
	pygame.display.update()
